package com.example.project.projectspringcloud.service.user;

import com.example.project.projectspringcloud.common.OperationException;
import com.example.project.projectspringcloud.entity.user.Menu;
import com.example.project.projectspringcloud.entity.user.Role;

import java.util.List;

public interface PermissionService {

    /**
     * role list
     * ==============================================================================
     *
     * @param role
     * @return
     */
    List<Role> roleList(Role role);

    /**
     * role get
     * ==============================================================================
     *
     * @param role
     * @return
     */
    Role getRole(Role role);

    /**
     * role save
     * ==============================================================================
     *
     * @param role
     * @return
     * @throws OperationException
     */
    boolean saveRole(Role role) throws OperationException;

    /**
     * role delete
     * ==============================================================================
     *
     * @param idarr
     * @return
     */
    boolean deleteRole(Integer[] idarr);

    /**
     * menu list
     * ==============================================================================
     *
     * @param menu
     * @return
     */
    List<Menu> menuList(Menu menu);

    /**
     * menu get
     * ==============================================================================
     *
     * @param menu
     * @return
     */
    Menu getMenu(Menu menu);

    /**
     * menu save
     * ==============================================================================
     *
     * @param menu
     * @return
     * @throws OperationException
     */
    boolean saveMenu(Menu menu) throws OperationException;

    /**
     * menu delete
     * ==============================================================================
     *
     * @param idarr
     * @return
     */
    boolean deleteMenu(Integer[] idarr);

    /**
     * get menu list by role id
     * ==============================================================================
     *
     * @param id
     * @return
     * @throws OperationException
     */
    List<Integer> getMenuListByRoleId(Integer id) throws OperationException;

    /**
     * update role-menu relation
     * ==============================================================================
     *
     * @param roleId
     * @param menus
     * @throws OperationException
     */
    void updateRelationRoleMenu(Integer roleId, Integer[] menus) throws OperationException;

    /**
     * select all menu by role name
     * constraint: if(constraint update) select from database, not redis
     * @return all menu
     */
    List<Menu> selectAllMenuByRole(boolean constraint);

}
